import pygame
# 游戏窗口区域（矩形区域）
SCREEN_RECT = pygame.Rect(0,0,480,700)
class Label(pygame.sprite.Sprite):
    """文本标签精灵"""
    font_path = "./res/font/MarkerFelt.ttc"     # 字体文件路径

    def __init__(self, text, size, color, *groups):
        """构造方法
        :param text: 文本内容
        :param size: 字体大小
        :param color: 字体颜色
        :param groups: 要添加到的精灵组
        """
        super().__init__(*groups)
        self.font = pygame.font.Font(self.font_path, size)
        self.color = color
        self.image = self.font.render(text, True, self.color)
        self.rect = self.image.get_rect()
    def set_text(self, text):
        """设置文本，使用指定的文本重新渲染 image，并且更新 rect
        :param text: 文本内容
        """
        self.image = self.font.render(text, True, self.color)
        self.rect = self.image.get_rect()
class GameSprite(pygame.sprite.Sprite):
    """游戏精灵类"""
    res_path = "./res/images/"                  # 图片资源路径
    def __init__(self, image_name, speed, *groups):
        """构造方法
        :param image_name: 要加载的图片文件名
        :param speed: 移动速度，0 表示静止
        :param groups: 要添加到的精灵组，不传则不添加
        """
        super().__init__(*groups)
        # 图像
        self.image = pygame.image.load(self.res_path + image_name)  # 图像
        self.rect = self.image.get_rect()       # 矩形区域，默认在左上角
        self.speed = speed                      # 移动速度
    def update(self, *args):
        """更新精灵位置，默认在垂直方向移动"""
        self.rect.y += self.speed
class Background(GameSprite):
    """背景精灵类"""
    def __init__(self, is_alt, *groups):
        # 调用父类方法实现精灵的创建
        super().__init__("background.png", 1, *groups)
        # 判断是否是另一个精灵，如果是，需要设置初始位置
        if is_alt:
            self.rect.y = -self.rect.h          # 设置到游戏窗口正上方
    def update(self, *args):
        # 调用父类的方法实现向下移动
        super().update(*args)                   # 向下运动
        # 判断是否移出游戏屏幕，如果移除屏幕，将图像设置到屏幕的上方
        if self.rect.y >= self.rect.h:
            self.rect.y = -self.rect.h
class StatusButton(GameSprite):
    """状态按钮类"""
    def __init__(self, image_names, *groups):
        """构造方法
        :param image_names: 要加载的图像名称列表
        :param groups: 要添加到的精灵组
        """
        super().__init__(image_names[0], 0, *groups)
        # 加载图像
        self.images = [pygame.image.load(self.res_path + name)
                       for name in image_names]
    def switch_status(self, is_pause):
        """切换状态
        :param is_pause: 是否暂停
        """
        self.image = self.images[1 if is_pause else 0]
